import {ConfigEnv, defineConfig, loadEnv, UserConfigExport} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import {wrapperEnv} from './src/utils/env'
import {configSvgIconsPlugin} from './src/plugins/configSvgIconsPlugin'
import {configMockPlugin} from './src/plugins/configMockPlugin'
export default ({mode}: ConfigEnv): UserConfigExport => {
    const root = process.cwd()

    const env = loadEnv(mode, root)
    const viteEnv = wrapperEnv(env)

    const {
        VITE_PORT, //项目运行端口
        VITE_USE_MOCK, //是否使用mock数据
    } = viteEnv
    return defineConfig({
        base: './',
        plugins: [
            vue(),
            configSvgIconsPlugin(), /* svg 处理插件*/
            configMockPlugin(VITE_USE_MOCK), /* mock 模拟请求插件 */
        ],
        // 路径代理、 @代表src
        resolve: {
            alias: {
                '@': path.resolve(__dirname, 'src'),
                '@/': path.resolve(__dirname, 'src')
            },
            extensions: ['.js', '.ts', '.vue', '.scss', '*']
        },
        // 引入第三方的配置
        optimizeDeps: {
            include: ["axios", "element-plus/lib/locale/lang/zh-cn"]
        },
        // 打包配置
        build: {
            target: 'modules',
            outDir: 'infiniScale', //指定输出路径
            minify: 'terser', // 混淆器，terser构建后文件体积更小
            chunkSizeWarningLimit: 2000, // 加大打包块限制的大小
        },
        server: {
            //服务器主机名
            host: '0.0.0.0',//允许本机
            //端口号
            port: VITE_PORT,
            //设为 true 时若端口已被占用则会直接退出，而不是尝试下一个可用端口
            strictPort: true,
            //服务器启动时自动在浏览器中打开应用程序,当此值为字符串时，会被用作 URL 的路径名
            open: false,
            //自定义代理规则，用来解决跨俞问题
            // proxy: {
            //     // 选项写法
            //     '/*': {
            //         target: 'https://ecloud.10086.cn',
            //         changeOrigin: true, /* 设置访问目标地址允许跨域*/
            //         rewrite: (path) => path.replace(/^\/api/, '')
            //     }
            // }
        },
        css: {
            preprocessorOptions: {
                scss: {
                    charset: false
                }
            }
        },
        //process定义为全局变量
        define: {
            'process.env': {
                ENV: process.env
            }
        }
    })
}


